Many desktop and server computer systems utilize a basic input/output system (“BIOS”) to control various aspects of the computer system. In particular, the BIOS is utilized to perform a power on self-test, to initialize the various hardware components within the computer system, to provide an interface between an operating system executing on the computer system and the hardware, and to perform various other functions.
In many computer systems, the BIOS is stored in an electrically erasable and programmable read only memory (“EEPROM”) device, also referred to herein as a “flash memory device” or a “flash part.” Because flash memory devices may be programmed while actually installed in a computer system, a computer BIOS stored in such a device may be upgraded without removing the flash part from the computer system. This is very convenient for both end users and system administrators.
Many flash memory devices are “sectored” devices that can update the program code stored in a portion of the device, called a “sector” or “block”, without modifying the program code stored in the remainder of the device. Many such devices also support the use of a special block that includes a hardware protection mechanism. When engaged, the hardware protection mechanism prevents software from erasing the contents of the block. This hardware protected block, called the “boot block”, is typically used to store a minimal amount of program code necessary for starting up the computer system. For instance, program code for discovering and initializing the random access memory (“RAM”) devices within the computer system may be stored in the boot block. The remainder of the BIOS may be stored in a non-hardware protected region of the EEPROM.
Recovery program code may also be stored in the boot block for recovering the remainder of the BIOS should it become corrupted. Utilizing the recovery program code, the BIOS can recover itself from erasure or corruption of all of the other sectors in the flash part as long as the code residing in the boot block is intact. The recovery program code utilizes an image of the BIOS stored on a mass storage device to reprogram the contents of the EEPROM other than the boot block.
When a computer system utilizing such a BIOS is powered on, the central processing unit (“CPU”) begins executing program code directly from the EEPROM to initialize the system RAM and to perform other functions. Because the CPU begins executing this code immediately upon powering up, this code must be stored in an uncompressed format ready for execution by the CPU. However, with the introduction of many new types of removable media drives and the increasing size of the BIOS program code, it has become necessary to support recovery from a variety of different media types. For instance, while recovery was initially supported from floppy disk only, it is now necessary to support recovery from floppy disk, CD-ROM, ZIP drives, LS-120 drives, the serial port, universal serial bus (“USB”) devices, and other types of devices. In order to support recovery from each of these types of devices, a large quantity of program code must be available within the book block portion of a system BIOS.
Several solutions have been found for increasing the amount of storage space available within the hardware protected boot block portion of a computer BIOS. However, each of these solutions suffers from at least one serious drawback. The first solution is simply to utilize a larger capacity flash part. However, large capacity flash parts are considerably more expensive than smaller capacity flash parts, thereby increasing the cost to manufacture the computer system. With the ever increasing cost competition in the computer industry, this is not a viable option for most manufacturers.
A second solution involves removing the recovery program code from the boot block. However, if the BIOS becomes corrupted and the recovery program code is unavailable in the boot block, it may become impossible to recover the contents of the BIOS. This also is not a viable option for most manufacturers. Alternatively, some manufacturers have chosen to remove program code for recognizing and initializing certain types of memory devices from the boot block portion of the BIOS. However, a computer system configured in this way may also become unbootable should an unsupported memory device be installed in the system. This would be frustrating for the computer user and may result in additional technical support costs to the manufacturer.
It is with respect to these considerations and others that the present invention has been made.